package org.adoxx.bpmn; import java.util.Date; import org.adoxx.pn.PetriNet; import org.adoxx.pn.input.ImporterManager; import org.adoxx.pn.simulation.Simulation; import org.adoxx.pn.simulation.data.Path; import org.adoxx.pn.simulation.data.PathCollector; import org.adoxx.pn.simulation.data.SimulationResults; import org.adoxx.pn.simulation.data.Trace; import org.adoxx.pn.simulation.data.TraceCollector; import org.adoxx.pn.simulation.data.measures.Measures; import org.adoxx.pn.simulation.data.measures.TotalMeasures; import org.adoxx.pn.simulation.handlers.impl.ActivitiesTotCounter; import org.adoxx.pn.simulation.handlers.impl.CostCalculator; import org.adoxx.pn.simulation.handlers.impl.CostMaxMinTotCalculator; import org.adoxx.pn.simulation.handlers.impl.DeadlockCounter; import org.adoxx.pn.simulation.handlers.impl.DeadlockIdentifier; import org.adoxx.pn.simulation.handlers.impl.ExecutionTimeCalculator; import org.adoxx.pn.simulation.handlers.impl.ExecutionTimeMaxMinTotCalculator; import org.adoxx.pn.simulation.handlers.impl.LivelockCounter; import org.adoxx.pn.simulation.handlers.impl.LivelockIdentifier; import org.adoxx.pn.simulation.handlers.impl.PathGeneration; import org.adoxx.pn.simulation.handlers.impl.TerminateEventCounter; import org.adoxx.pn.simulation.handlers.impl.TerminateEventHandler; import org.adoxx.pn.simulation.handlers.impl.TraceGeneration; import org.adoxx.pn.simulation.handlers.impl.TransitionSelectorAdoxx; import org.adoxx.pn.simulation.handlers.impl.WaitingTimeCalculator; import org.adoxx.pn.simulation.handlers.impl.WaitingTimeMaxMinCalculator; import org.adoxx.utils.Utils; public class SimulationEngine { SimulationResults[] simulationResultsList = new SimulationResults[0];; ImporterManager importManager = null; Simulation simulation = null; PathGeneration pathGeneration = null; TraceGeneration traceGeneration = null; CostCalculator costCalculator = null; CostMaxMinTotCalculator costMaxMinTotCalculator = null; ExecutionTimeCalculator executionTimeCalculator = null; ExecutionTimeMaxMinTotCalculator executionTimeMaxMinTotCalculator = null; WaitingTimeCalculator waitingTimeCalculator = null; WaitingTimeMaxMinCalculator waitingTimeMaxMinCalculator = null; ActivitiesTotCounter activitiesTotCounter = null; TerminateEventHandler terminateEventHandler = null; TerminateEventCounter terminateEventCounter = null; DeadlockIdentifier deadlockIdentifier = null; DeadlockCounter deadlockCounter = null; LivelockIdentifier livelockIdentifier = null; LivelockCounter livelockCounter = null; TransitionSelectorAdoxx transitionSelectorAdoxx = null; public SimulationEngine(){ initialize(); } private void initialize(){ importManager = new ImporterManager(); pathGeneration = new PathGeneration(); traceGeneration = new TraceGeneration(pathGeneration); costCalculator = new CostCalculator(); costMaxMinTotCalculator = new CostMaxMinTotCalculator(costCalculator, traceGeneration); executionTimeCalculator = new ExecutionTimeCalculator(); executionTimeMaxMinTotCalculator = new ExecutionTimeMaxMinTotCalculator(executionTimeCalculator, traceGeneration); waitingTimeCalculator = new WaitingTimeCalculator(executionTimeCalculator); waitingTimeMaxMinCalculator = new WaitingTimeMaxMinCalculator(waitingTimeCalculator, traceGeneration, pathGeneration); activitiesTotCounter = new ActivitiesTotCounter(); terminateEventHandler = new TerminateEventHandler(); terminateEventCounter = new TerminateEventCounter(terminateEventHandler); deadlockIdentifier = new DeadlockIdentifier(); deadlockCounter = new DeadlockCounter(deadlockIdentifier, pathGeneration); livelockIdentifier = new LivelockIdentifier(); livelockCounter = new LivelockCounter(livelockIdentifier, pathGeneration); transitionSelectorAdoxx = new TransitionSelectorAdoxx(); simulation = new Simulation(); //Follow the definition order.. IT'S IMPORTANT!! (is the order by which they will be called during the simulation) simulation.setTransitionSelector(transitionSelectorAdoxx); simulation.addSimulationListener(pathGeneration); simulation.addSimulationListener(traceGeneration); simulation.addSimulationListener(costCalculator); simulation.addSimulationListener(costMaxMinTotCalculator); simulation.addSimulationListener(executionTimeCalculator); simulation.addSimulationListener(executionTimeMaxMinTotCalculator); simulation.addSimulationListener(waitingTimeCalculator); simulation.addSimulationListener(waitingTimeMaxMinCalculator); simulation.addSimulationListener(activitiesTotCounter); simulation.addSimulationListener(terminateEventHandler); simulation.addSimulationListener(terminateEventCounter); simulation.addSimulationListener(deadlockIdentifier); simulation.addSimulationListener(deadlockCounter); simulation.addSimulationListener(livelockIdentifier); simulation.addSimulationListener(livelockCounter); } public ImporterManager getImporterManager(){ return importManager; } public Simulation getSimulation(){ return simulation; } public SimulationResults[] getSimulationResults(){ return simulationResultsList; } public void executePathAnalysis(String model, int numExecutions) throws Exception{ simulationResultsList = new SimulationResults[0]; long importStartTime = new Date().getTime(); PetriNet[] pnList = importManager.generateFromModel(model); long importEndTime = new Date().getTime() - importStartTime; Utils.log("Last model import time: " + Utils.convertoMillisecondsToStringDateTime(importEndTime), Utils.LogType.INFO); simulationResultsList = new SimulationResults[pnList.length]; for(int i=0;i